Adjustable virtual network performance

ABSTRACT

Methods, systems, and apparatus, including computer programs encoded on a computer storage medium, relating to managing resources. In one aspect, a method includes the actions of receiving configuration information, the configuration information specifying a plurality of parameter values including values for a size and input/output performance parameters, where the size and performance parameters are independently specified by a user; determining one or more physical resources that satisfy the received configuration information; and generating one or more virtual disk instances having the specified size and performance parameters.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a continuation application of, and claims priorityto, U.S. patent application Ser. No. 13/295,897, for Adjustable VirtualNetwork Performance to Joseph S. Beda III and Andrew Kadatch, which wasfiled on Nov. 14, 2011. The disclosure of the foregoing application isincorporated here by reference.

BACKGROUND

This specification relates to providing managing resources.

Cloud computing is network-based computing in which typically largecollections of servers housed in data centers or “server farms” providecomputational resources and data storage as needed to remote end users.Some cloud computing services provide access to software applicationssuch as word processors and other commonly used applications to endusers who interface with the applications through web browsers or otherclient-side software. Users' electronic data files are usually stored inthe server farm rather than on the users' computing devices. Maintainingsoftware applications and user data on a server farm simplifiesmanagement of end user computing devices. Some cloud computing servicesallow end users to execute software applications in virtual machines.

SUMMARY

This specification describes technologies relating to managingresources.

In general, one innovative aspect of the subject matter described inthis specification can be embodied in methods that include the actionsof receiving configuration information, the configuration informationspecifying a plurality of parameter values including values for a sizeand input/output performance parameters, where the size and performanceparameters are independently specified by a user; determining one ormore physical resources that satisfy the received configurationinformation; and generating one or more virtual disk instances havingthe specified size and performance parameters. Other embodiments of thisaspect include corresponding computer systems, apparatus, and computerprograms recorded on one or more computer storage devices, eachconfigured to perform the actions of the methods. A system of one ormore computers can be configured to perform particular operations oractions by virtue of having software, firmware, hardware, or acombination of them installed on the system that in operation causes orcause the system to perform the actions. One or more computer programscan be configured to perform particular operations or actions by virtueof including instructions that, when executed by data processingapparatus, cause the apparatus to perform the actions.

These and other embodiments can each optionally include one or more ofthe following features. Generating each virtual disk instance includesallocating usage of at least a share of each of the one or moredetermined physical resources to the respective virtual disk instance.The method further includes presenting an interface to a user, theinterface including fields for specifying discrete values forconfiguration information including a plurality of parameters. Themethod further includes monitoring usage of the virtual disk instance.The method further includes determining that the usage of the virtualdisk instance is less than a threshold for the specified parameter; andsuggesting a modification of the parameter based on the usage. Themethod further includes updating the performance parameter for thevirtual disk instance. Updating the parameter further includes updatingan allocation of one or more physical resources to the virtual diskinstance. A pricing for the virtual disk instance is adjusted based onthe specified size and performance parameters. The virtual disk instanceappears to a user as a single physical disk having the specified sizeand input/output performance parameters regardless of the number ofphysical resources allocated to the virtual disk instance. Theperformance of a plurality of physical resources allocated to thevirtual disk instance is smoothed to mimic a single machine. The methodfurther includes receiving one or more user adjustments to the size andperformance parameters; and dynamically modifying the one or morevirtual disk instances based on the received user adjustments. The oneor more virtual disk instances are used to build an instance of avirtual machine. Receiving configuration information includes providingcontrols for receiving user input specifying virtual disk parametervalues unconstrained by physical hardware.

In general, one innovative aspect of the subject matter described inthis specification can be embodied in methods that include the actionsof providing usage data for a virtual disk instance; receiving userinput modifying one or more configuration parameters for the virtualdisk instance; and dynamically updating virtual disk configurationaccording to the modified one or more configuration parameters. Otherembodiments of this aspect include corresponding computer systems,apparatus, and computer programs recorded on one or more computerstorage devices, each configured to perform the actions of the methods.A system of one or more computers can be configured to performparticular operations or actions by virtue of having software, firmware,hardware, or a combination of them installed on the system that inoperation causes or cause the system to perform the actions. One or morecomputer programs can be configured to perform particular operations oractions by virtue of including instructions that, when executed by dataprocessing apparatus, cause the apparatus to perform the actions.

These and other embodiments can each optionally include one or more ofthe following features. The method further includes determining that theusage of the virtual disk instance is less than a threshold for aspecified parameter; and suggesting a modification of the parameterbased on the usage. Suggesting the modification include presenting achanged pricing for the updated virtual machine instance based on themodified parameter. The configuration parameter is an I/O rate. Theconfiguration parameter is throughput. The method further includesupdating a virtual machine instance associated with the virtual diskbased on the updated configuration parameters.

Particular embodiments of the subject matter described in thisspecification can be implemented so as to realize one or more of thefollowing advantages. Users can specify a quality of service for virtualmachine resources (e.g., disk input/output rate, throughput) in aflexible manner. Users can also dynamically specify other aspects ofvirtual machine resources, for example, disk durability for virtualdisks. The aspects can be specified at setup time, a discrete conversionprocess, or through run time parameter adjustments. In particular,performance characteristics of virtual disks can be dynamically changedduring runtime.

The details of one or more embodiments of the subject matter describedin this specification are set forth in the accompanying drawings and thedescription below. Other features, aspects, and advantages of thesubject matter will become apparent from the description, the drawings,and the claims.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a schematic illustration of an example virtual machine system.

FIG. 2 is a schematic diagram of an example resource manager.

FIG. 3 is a flow diagram of an example process for allocating resourcesfor a particular virtual machine configuration.

FIG. 4 is a flow diagram of an example process for dynamically modifyinga virtual machine configuration.

Like reference numbers and designations in the various drawings indicatelike elements.

DETAILED DESCRIPTION

Users can specify a configuration for one or more virtual machineinstances including one or more parameters for the virtual machines.Parameters can include, for example, storage size for one or morevirtual disks of the virtual machine instances as well as performance.Performance can include bandwidth and/or input/output performance (e.g.,disk read/write rate) of virtual disks. The parameters can be specifiedindependently of each other, for example, such that a particularperformance rate of a particular virtual machine instance does notdepend on the storage size of the virtual machine instance.

A virtual machine instance can be generated that includes one or morevirtual disks satisfying the specified size and performancecharacteristics. In particular, a virtual disk can be configured in aflexible manner. These virtual disks are attached to particular virtualmachine instances. The parameters for a virtual disk can be set atcreation time, changed online through an offline conversion process, orset dynamically and transparently to a running virtual machine. Thus,for a given virtual machine instance, a user can modify characteristicsof a virtual disk allocated to that virtual machine instance.

One or more physical resources (e.g., physical disks) that satisfy thesize and performance parameters are identified for use by the virtualmachine. The virtual machine instance can include virtual hardware tomimic a physical device having the selected configuration. Thus, forexample, the virtual machine instance can appear to a user as a singlephysical machine instance even though the virtual machine instance canbe associated with various physical resources. For example, a singlevirtual disk allocated to the virtual machine instance can be associatedwith multiple and/or fractions of physical disks. In someimplementations, the performance of the actual physical resourcesallocated to the virtual machine instance can be smoothed such that thevirtual machine instance more closely mimics the physical devicerepresented by the virtual hardware of the virtual machine instance.Additionally, performance of a virtual machine instance can berestricted to mimic a corresponding physical device.

In some implementations, actual virtual disk usage can be monitored andcompared with the specified configuration parameters. For example, ifactual performance usage (e.g., an actual rate of read/write operations)is less than a level specified by the performance parameter (e.g., by athreshold amount), the measured usage levels can be provided or asuggestion of a modified performance parameter can be provided. The usercan modify the configuration of the virtual disk to modify one or moreperformance parameters. In some implementations, the configuration isautomatically changed to modify one or more performance parameters. Themodified one or more performance parameters, for example, can be areduction based on the actual usage. Alternatively, the modified one ormore performance parameters can be a variable performance parameterbased on actual usage with respect to particular times or days. Theconfiguration of the one or more virtual disks can be updated duringruntime in response to the one or more modified performance parameters.

FIG. 1 is a schematic illustration of an example virtual machine system100. The system 100 includes one or more host machines, for example,host machine 102 and host machine 104. Generally speaking, a hostmachine is one or more data processing apparatus such as a rack mountedservers or other computing devices. The data processing apparatus can bein different physical locations and can have different capabilities andcomputer architectures. Host machines can communicate with each otherthrough an internal data communication network 116. The internal networkcan include one or more wired (e.g., Ethernet) or wireless (e.g., WI-FI)networks, for example. In some implementations the internal network 116is an intranet. Host machines can also communicate with devices onexternal networks, such as the Internet 122, through one or moregateways 120 which are data processing apparatus responsible for routingdata communication traffic between the internal network 116 and theexternal network 122. Other types of external networks are possible.

Each host machine executes a host operating system (“OS”) or othersoftware that virtualizes the underlying host machine hardware andmanages concurrent execution of one or more virtual machines. Forexample, the host operating system 106 is managing virtual machine (VM)110 and VM 112, while host OS 108 is managing a single VM 114. Each VMincludes a simulated version of the underlying host machine hardware, ora different computer architecture. The simulated version of the hardwareis referred to as virtual hardware (e.g., virtual hardware 110 a, 112 aand 114 a). For example, the simulated hardware can include one or morevirtual disks. The virtual disks can be associated with physical disksthat are local to the machine the virtual machine instance is running onor remotely located. Software that is executed by the virtual hardwareis referred to as guest software. In some implementations, guestsoftware cannot determine if it is being executed by virtual hardware orby a physical host machine. If guest software executing in a VM, or theVM itself, malfunctions or aborts, other VMs executing on the hostmachine will not be affected. A host machine's microprocessor(s) caninclude processor-level mechanisms to enable virtual hardware to executesoftware applications efficiently by allowing guest softwareinstructions to be executed directly on the host machine'smicroprocessor without requiring code-rewriting, recompilation, orinstruction emulation.

Each VM (e.g., VMs 110, 112 and 114) is allocated a set of virtualmemory pages from the virtual memory of the underlying host operatingsystem and is allocated virtual disk blocks from one or more virtualdisk drives for use by the guest software executing on the VM. Forexample, host operating 106 allocates memory pages and disk blocks to VM110 and VM 112, and host operating system 108 does the same for VM 114.In some implementations, a given VM cannot access the virtual memorypages assigned to other VMs. For example, VM 110 cannot access memorypages that have been assigned to VM 112. A virtual disk drive can bepersisted across VM restarts. Virtual disk blocks are allocated onphysical disk drives coupled to host machines or available over theinternal network 116, for example. In addition to virtual memory anddisk resources, VMs can be allocated network addresses through whichtheir respective guest software can communicate with other processesreachable through the internal network 116 or the Internet 122. Forexample, guest software executing on VM 110 can communicate with guestsoftware executing on VM 112 or VM 114. In some implementations, each VMis allocated one or more unique Internet Protocol (IP) version 4 orversion 6 addresses and one or more User Datagram Protocol (UDP) portnumbers.

A VM's guest software can include a guest operating system (e.g., guestoperating systems 110 b, 112 b and 114 b) which is software thatcontrols the execution of respective guest software applications (e.g.,guest applications 110 c, 112 c and 114 c), within the VM and providesservices to those applications. For example, a guest operating systemcould be a variation of the UNIX operating system. Other operatingsystems are possible. Each VM can execute the same guest operatingsystem or different guest operating systems. In further implementations,a VM does not require a guest operating system in order to execute guestsoftware applications. A guest operating system's access to resourcessuch as networks and virtual disk storage is controlled by theunderlying host operating system.

By way of illustration, and with reference to virtual machine 110, whenthe guest application 110 c or guest operating system 110 b attempts toperform an input/output operation on a virtual disk, initiate networkcommunication, or perform a privileged operation, for example, thevirtual hardware 110 a is interrupted so that the host operating system106 can perform the action on behalf of the virtual machine 110. Thehost operating system 106 can perform these actions with a process thatexecutes in kernel process space 106 b, user process space 106 a, orboth.

The kernel process space 106 b is virtual memory reserved for the hostoperating system 106's kernel 106 d which can include kernel extensionsand device drivers, for instance. The kernel process space has elevatedprivileges (sometimes referred to as “supervisor mode”); that is, thekernel 106 d can perform certain privileged operations that are offlimits to processes running in the user process space 106 a. Examples ofprivileged operations include access to different address spaces, accessto special functional processor units in the host machine such as memorymanagement units, and so on. The user process space 106 a is a separateportion of virtual memory reserved for user mode processes. User modeprocesses cannot perform privileged operations directly.

In various implementations, a portion of VM network communicationfunctionality is implemented in a communication process (e.g.,communication process 106 c). In some implementations, the communicationprocess executes in the user process space (e.g., user process space 106a) of a host operating system (e.g., host operating system 106). Inother implementations, the communication process can execute in thekernel process space (e.g., kernel process space 106 d) of the hostoperating system. There can be a single communication process for allVMs executing on a host machine or multiple communication processes,e.g., one for each VM executing on the host machine. In yet furtherimplementations, some portion of the communication process executes inthe user process space and another portion executes in the kernelprocess space.

The communication process communicates with a registry service (e.g., VMregistry service 118) in order to establish a virtual network pair (VNP)between two VMs. A virtual network pair (VNP) is a logical computernetwork that is implemented on top of one or more physical (wired orwireless) computer networks. A VNP routes traffic between two endpointsusing one or more virtual connections or links. By way of illustration,a VNP between virtual machine 110 and virtual machine 114 would routepackets sent between VNP endpoints managed respectively by communicationprocesses 106 c and 108 c over internal network 116. The VM registryservice 118 is one or more data processing apparatus that executesoftware for keeping track of assignments of network addresses (e.g., IPaddresses) to VMs, and for keeping track of network addresses (e.g., IPaddresses) of host machines that the VMs are executing on. The dataprocessing apparatus can be in different locations and can havedifferent capabilities and computer architectures.

FIG. 2 is a schematic diagram of an example resource manager 210. Theresource manager 210 models the allocation and deallocation of resourcesin the virtual machine system 230. Allocating a resource for the virtualmachine system 230 can reserve the resource for a so-called owner thatcontrols the lifecycle of that resource. Ownership need not define anexclusive use relationship. Allocating a resource for the system 230 canalso permit a user to use the resource—a usage allocation. Owners andusers can be human operators, computer processes, or any other resourcein the system 230. Some resources can have a maximum number of ownersand users. In some implementations, each resource has exactly one owner.

The resource manager 210 can allocate a variety of types of resources inthe virtual machine system 230, including physical resources 234,virtual resources 232, and other resources. Types of resources that canbe allocated by the resource manager 210 include, for example, aphysical host machine, a physical hard disk, a network connection,network firewall rules, a virtual machine, a logical virtual machine,and a virtual disk. These resources can be allocated to a human owner,to a virtual machine, or to a host machine in the system 230.Additionally, the resource manager 210 can manage creation andparameters of virtual disks 242 along with coordinating usage of virtualdisks 242 by particular virtual machine systems 230. In someimplementations, the resources are allocated based on a specifiedvirtual machine configuration e.g., to provide a virtual machine havingspecified size and performance characteristics. In addition toallocating resources, the performance characteristics of those resourcescan also be specified. Performance characteristics for resources, inparticular virtual disks 242, can be controlled dynamically, e.g., usinga particular application programming interface.

The resource manager 210 generally operates by routing messages to andfrom various entities in the system 230. The messages can be sent toentities in the system 230 through an internal data communicationnetwork 240, for example, or through other inter-process communicationmeans. The data communication network 240 can be the same network asinternal network 116 of FIG. 1, but need not be. Messages can be queuedin persistent storage 220 before being handled by a recipient. Thepersistent storage 220 can persist messages in one or more storagedevices so that messages can remain in storage after the processes thatstored them have ended or failed. The persistent storage 220 can bereplicated across multiple hard disks or other computer-readable media,e.g., disks 222 a, 222 b, and 222 c.

An architecture of the resource manager 210 can include logical softwarecomponents or layers. An uppermost layer is a message handler layer 212.The message handler layer 212 includes definitions of message types andmessage handler routines. The message handler routines receive messagesand respond in various ways that can affect the allocation orde-allocation of system 230 resources. Message handler routines can alsosend messages to other entities in the system 230. In someimplementations, the message handler layer is implemented in acontinuation-passing style in which message handlers are identifiedexplicitly in the message itself. In other words, every message caninclude an identification of the message handler.

In some implementations, function or procedure calls between layers canbe implemented as remote procedure calls. Remote procedure calls allow asoftware process executing on one data processing apparatus to invoke asoftware process that is executing on a different data processingapparatus. Using remote procedure calls can allow layers of the resourcemanager to be implemented on multiple data processing apparatus.

The layer logically below the message handler layer 210 is a directedgraph layer 214. The directed graph layer 214 maintains a directed graphof the underlying ownership and usage structure of resources in thesystem 230. Each node in the graph corresponds to a resource in thesystem 230, and in some implementations each node has an associatedmessage handler. A node can correspond to a resource (e.g., a hard diskor a virtual machine). Each link in the graph corresponds to anownership or usage allocation of a resource. The directed graph layer214 maintains the graph by adding and deleting nodes and links in thegraph. For example, if a host machine (e.g., host machine 102) fails,all resources owned or used by that host machine can be de-allocated bydeleting the appropriate nodes and links in the graph. In someimplementations, if a parent node is deleted, all child nodes andcorresponding links are also deleted.

The directed graph layer 214 can use links in the graph to routemessages to the appropriate message handlers. For example, a parent nodecan send a message to a child node. In other words, the parent node'smessage handler sends a message indicating that the child node's messagehandler should handle the message. In response, the child node canhandle the message through its associated message handler or send amessage back to the parent node by indicating that the parent node'smessage handler should handle the message.

In general, messages can contain any type of data. Some messages canhave specific types, which can be handled according to the context ofthe recipient. For example, a parent node can also send a “Create”message to a nonexistent child node. The message handler for thenonexistent child node can handle a “Create” message by creating aninstance of a node. The parent node's message handler sends the “Create”message, indicating that the message should be handled by a new childnode after it is created.

The directed graph layer creates a new child node, associates a messagehandler definition with the new child node, and passes the message tothe new child node. The new child node's message handler processes themessage. The new child node's message handler can, for example, respondto the parent node by sending a “Create link” message back to the parentnode, which can result in a link being created in the graph between theparent node and the child node. Links between nodes can be used by thedirected graph layer 214 for appropriately routing messages according tolinks maintained in the directed graph layer 214.

Some message types cause updates to be propagated to multiple nodes atmultiple levels of the graph. For example, a message containing anupdate to firewall rules may be applicable to multiple elements of datacommunication network 240, e.g., routers, switches, host machines, andvirtual machines. If a node corresponding to the data communicationnetwork 240 receives a message to update firewall rules in the network,the updated firewall rules can be propagated to all nodes in the graphrequiring the update.

Layering the message handler layer 212 logically above the directedgraph layer 214 can allow software developers to easily define newmessage types and new resource types. Defining a new message type or anew resource type can involve writing software code only for new messagehandlers in the message handler layer 212 without altering thefunctionality of the directed graph layer 214. The ability to easilydefine new resource types and new message types can improve flexibilityand scalability of the resource manager because the types of messagesand resources modeled in the system are not constrained to a predefinedset of resource types.

Messages are sent to entities in the system by the storage layer 216.The storage layer 216 stores all messages in persistent storage 220.Storing messages in the persistent storage 220 can ensure that theresource manager 210 can recover and resume its current state aftersystem failures. In some implementations, the storage layer 216 alsostores nodes and links of the directed graph in persistent storage 220upon creation.

The storage layer 216 can implement and maintain multiple messagequeues. A separate queue can be created between each pair ofcommunicating nodes in the graph, for instance. Creating multiple queuescan improve system throughput and scalability. The particular order ofmessages in a queue can also be stored in the persistent storage 220, aswell as messages in the queue. In some implementations, messages inqueues are causally ordered, such that messages sent first are first inthe queue. The resource manager can determine which of two messages weresent first by comparing a timestamp included in the message. Other waysof ordering messages in queues are possible.

To send a message, a node in the graph can call the storage layer 216with the message and an identification of the recipient node. Thestorage layer 216 can store the message in a queue associated with therecipient node. The storage layer 216 can also enqueue a task in memoryof a data processing apparatus to trigger the recipient node's messagehandler to read and process the message. Upon being triggered, therecipient node's message handler can call the storage layer to read thenext message from the queue. The storage layer 216 reads the nextmessage from the appropriate queue and returns the message to therecipient node's message handler for processing.

In some implementations, message handlers can be implemented astransactions. Transactions ensure that either all message handleroperations succeed or that no message handler operations succeed. Insome implementations, the transactions ensure the “ACID” guarantees ofatomicity, consistency, isolation, and durability.

In general, each message handler can make changes to the directed graphlayer 214 and send one or more messages to other entities in the system.Examples of operations that message handlers can perform includechanging the state of a node, creating or deleting links to other nodes,affecting changes in systems outside of the resource manager 210 (e.g.,changes in the virtual machine system 230), sending new messages toitself or to other nodes, and creating or deleting nodes. If requestedchanges to the directed graph layer 214 are unsuccessful, the messagehandler can send an error message instead of sending messages associatedwith a successful change.

For example, if the resource manager tries to allocate an IP address fora virtual machine and succeeds, a success message can be sent. But ifthe allocation of the IP address fails, an error message can be sent. Inthe case of critical failures (from, e.g., conflicting messages sentfrom multiple processes), the resource manager can restore the system bydeleting nodes for the failed resources and inserting new nodes into thegraph. The transactional implementation of message handlers can ensurethat a system failure that occurs before completion of a message handlerprocess will not result in incomplete or partial changes to the directedgraph layer 214.

In some implementations, message handlers are stateless; i.e., theactions of a message handler do not depend on the current state of thedirected graph layer 214. The transactional implementation of messagehandlers can improve scalability of the system by implementingtransactions on one resource at a time. Implementing transactions on oneresource at a time can ensure that multi-message operations serialize atexactly one resource instead of multiple resources. In other words, allresources involved in a multi-message operation need not wait for allmessages in the operation to be processed.

As a result of certain failures or errors in the system, some messagesmay remain unprocessed in the persistent storage 220. The resourcemanager 210 can determine that an atypical amount of time has passedfrom the time the message was enqueued and determine that the message isan unprocessed message. In order to handle unprocessed messages, thestorage layer 216 can implement a scanner process. The scanner processcan be a separate process executing on data processing apparatus thatperiodically checks the messages queues for unprocessed messages andhandles them by invoking the appropriate message handler.

The resource manager 210 can be implemented in multiple instances ofprocesses executing on data processing apparatus, and the multipleprocess instances can be executing on multiple data processingapparatus. Additionally, each process instance can include multiplelightweight processes (e.g., threads), each lightweight process beingtriggered to execute software code for message handlers of nodes in thesystem in response to messages in the persistent storage 220. Theability to implement the resource manager 210 in an arbitrarily largenumber of data processing apparatus executing message handlers canimprove scalability of the resource manager 210. The resource manager210 can thus manage an arbitrarily large number of resources in thevirtual machine system 230.

In the event that two competing processes send conflicting messages tothe same node, the resource manager 210 can use the message queues toenforce causal ordering. In other words, a message that was sent firstwill prevail. The conflicting message that was sent second will fail,which can result in an error message being sent back to the sender.

In some implementations, the resource manager 210 can improve throughputof the message processing by implementing an optimistic master writingprocess to handle writing messages to the persistent storage 230. Themaster writing process can be a computer program executing on one ormore data processing apparatus of the resource manager 210. Anoptimistic process is a process that potentially competes with otherpeer processes for performing the same operation, but an optimisticprocess does not check for or wait to see if other competing processesmight be performing the same operation. Instead, the first optimisticprocess to successfully complete the task wins the competition.

An identified master writing process can receive write requests fromother processes (from, e.g., processes of the directed graph layer 214)and write corresponding messages to the persistent storage 230. Otherprocesses that rely on the master writing process will be referred to as“client processes.” The master writing process can write messages to thepersistent storage 230 in batches and can perform multiple writes in thesame operation, which can improve the throughput of message processing.Throughput can be particularly improved in implementations where thepersistent storage 230 is replicated across multiple storage devicesthat require periodic synchronous replication.

The resource manager 210's current master writing process can beidentified by an identifier written into the persistent storage 230. Insome implementations, the identifier is an RPC address of the currentmaster writing process. Client processes can retrieve from thepersistent storage 230 the RPC address of the master writing process andcan use this RPC address to forward messages to the master writingprocess for writing the messages to the persistent storage 230. A masterwriting process can send an acknowledgement to the client process thatrequested the message to be written to the persistent storage 230 toindicate a successful write.

When a new master writing process is started, the new master writes itsown identifier (e.g., RPC address) into the persistent storage 230. Whenother competing master writing processes encounter an RPC address ofanother master writing process in the persistent storage 230, thesecompeting processes will exit. In other words, competing processes thatlose the race to write their own RPC address to the persistent storage230 automatically end themselves so that only one master writing processexists at a time.

The resource manager 210 can also send messages that affect resources ofthe virtual machine system 230. For example, a node in the graph cansend a “Start VM” message that starts a virtual machine on a hostmachine in the virtual machine system 230. “Start VM” is an example of amessage type. The message can initially be sent to another node in thegraph (e.g., to a virtual machine node), or the message can be sent tothe same sender node. Sending the “Start VM” through the storage layer216 can ensure that the message is persisted in storage such that on asystem failure, the “Start VM” message will survive and be processedappropriately. When a recipient node receives the “Start VM” message,the node can communicate with a communication process (e.g.,communication process 106 c) on a host machine (e.g., host machine 106)to start a virtual machine.

In some implementations, the recipient node communicates with thecommunication process with a remote procedure call. If the remoteprocedure call fails or never returns, an error message can be sent tothe node sending the “Start VM” message. Error messages can be sentthrough the storage layer 216 to ensure that even after a systemfailure, the resource manager 210 can resume and handle errorsappropriately.

FIG. 3 is a flow diagram of an example process 300 for allocatingresources for a particular virtual disk configuration. For convenience,the process 300 will be described with respect to a system having one ormore computing devices that performs the process 300. In someimplementations, the process 300 can be performed by the virtual machinesystem 100 of FIG. 1.

The system presents an interface for generating a virtual disk instance(302). A virtual disk instance can be generated as part of generating avirtual machine instance that will use the virtual disk instance. Inparticular, an application programming interface (API), e.g., HypertextTransfer Protocol (HTTP)/Representational State Transfer(REST)/JavaScript Object Notation (JSON), can be provided. One or moreclients can use the API to present features for interacting with thesystem. For example, using a command line or user interface. Forexample, when a user (as used in this specification, user includes bothindividuals as well as entities (e.g., a company)) requests thegeneration of a virtual disk, a user interface can be provided by thesystem.

The user interface can include a number of configuration parameters forcustomizing a virtual disk instance or instances that satisfy the user'sspecifications. The configuration parameters can be used to generateboth a virtual disk instance as well as for a virtual machine associatedwith the generated virtual disk instance. For example, the parameterscan include a memory storage size (e.g., a size for one or more disks),a bandwidth for communicating with the virtual disk instance through anetwork interface, and an input/output performance rate for one or moredisks (e.g., 100 I/O's per second).

In some implementations, the fact that the disk instance is a virtualdisk instance is transparent to the user. In particular, the user can bepresented with an interface for configuring a system presented as a diskon a physical host machine. Thus, the interface presents parameterspurportedly for a particular device instance that the user can use, forexample, to provide remote services or storage (e.g., to be used asnetwork storage or a network service provider).

The system receives input specifying one or more of the parameters(304). In particular, the user can provide an input specifying two ormore of the parameters for configuring the virtual disk instanceindependently of each other. For example, the user can specify a sizeand I/O performance rate for a virtual disk independently. In someimplementations, the presented interface includes fields in which theuser can specify values for the respective parameters. In some otherimplementations, drop down menus provide a plurality of discrete valuesthat the user can independently select from. The user can specifyparameters based on the user's particular needs. For example, particularapplications can require high performance. A user planning to operate anapplication requiring high performance on the disk instance can provideinput specifying a particular performance rate (e.g., in terms of I/Oper second or communication bandwidth).

Thus, for example, a user can configure a virtual machine instancehaving one or more virtual disks that provide two terabytes (TB) ofstorage. The user can then select values for the performance of the oneor more virtual disks, for example, selecting from among a plurality ofI/O rates. Consequently, the user can customize the machine instance toa particular performance and size of one or more associated diskinstances. As a result, for example, a user can select a highperformance on a large storage size or a small storage size.

In some implementations, the interface presents a corresponding pricingbased on the user input. The price can be a function of the parametervalues. For example, for a given storage size, different performancerates can result in different pricing. For example, the price of avirtual disk instance having a particular performance can be higher thanthe price of another virtual disk instance having the same storage sizebut lower performance. In some implementations, the pricing iscalculated such that a single virtual disk instance having particularsize and performance is less costly or equal cost to two distinctvirtual disk instances that combine to provide the same size andperformance.

The system determines one or more physical resources to satisfy thereceived parameters (306). For example, the system can determine acombination of one or more host machines (e.g., host machines 102, 104in FIG. 1) that include hardware disk drives, processing power, memory,and other hardware or software parameters that can satisfy the receivedvirtual disk configuration parameters. In some implementations, specificphysical resources, from a collection of physical resources, areidentified. In some other implementations, particular types of physicalresources are identified (e.g., disks having at least a particularcapacity or performance), from which a combination of specific resourcescan be selected as needed. For a particular physical resource, theentire physical resource can be identified or a particular sharedportion of the physical resource can be identified. For example, the I/Orate is limited by the physical characteristics of the particularhardware disk. Thus, in order to achieve a specific I/O rate, multiplephysical resources or a share of a physical resource can be used. Insome implementations, different processes are performed to configurevirtual machine resources from processes performed to identifyparticular characteristics of virtual disks. A virtual disk matchingreceived parameters can be later modified even after being associatedwith a particular virtual machine.

The system generates a virtual disk instance having the specifiedconfiguration (308). The virtual disk instance can be associated with avirtual machine instance that can run on one or more host machines. Thevirtual machine instance can be associated with the determined physicalresources. In particular, the determined physical resources or shares ofresources can be allocated to the virtual machine instance.Alternatively, the virtual machine instance can be associated with acollection of physical resources that can be selectively used to providethe required configuration. Thus, for example, if a physical resourcefails, one or more replacement physical resources can be associated withthe virtual machine instance. Additionally, multiple virtual machineinstances can be generated, each associated with corresponding physicalresources and connected, for example, as one or more virtual networkpairs.

The virtual machine instance is associated with a virtual hardwareincluding a virtual persistent disk having the specified size and I/Orate. Additionally, the virtual machine instance can include a guestoperating system and one or more guest applications as specified by theuser. Thus, the user can operate the virtual machine instance (e.g.,over a network) as if it were a physical machine having the specifiedconfiguration. In some implementations, generating the virtual machineinstance includes generating one or more virtual disk instances based onspecified configuration parameter values, e.g., size, I/O rate,throughput.

In some implementations, the performance of the associated physicalresources is smoothed to mimic the performance of the virtual hardware.In particular, the collection of two or more physical resources (e.g.,multiple disks) can have the overall performance required by the userinput parameters, but the behavior may not be identical to a single diskhaving the same performance characteristics. The smoothing is performedto allow the virtual disks to mimic corresponding physical hardware. Forexample, this allows for improved performance of applications running onvirtual machines that are designed for latency and throughputlimitations of physical devices and can provide consistent performance.

In some implementations, the process 300 is performed at creation timefor one or more virtual machines. However, in some other implementation,steps of process 300 can be performed at runtime such that users canadjust performance of virtual machines by modifying one or moreparameters. The virtual machines can then be reconfigured based on themodified one or more parameters.

FIG. 4 is a flow diagram of an example process for dynamically modifyinga virtual machine configuration. For convenience, the process 400 willbe described with respect to a system having one or more computingdevices that performs the process 400. In some implementations, theprocess 400 can be performed by the virtual machine system 100 of FIG.1.

The system monitors the usage of a virtual disk instance (402). Inparticular, the system can monitor the usage of a virtual disk instancerelative to specified configuration parameters for the virtual diskinstance (e.g., as part of a particular virtual machine). The specifiedconfiguration parameters can be a combination of default parametervalues for the virtual disk instance or can include one or moreindividually specified parameter values (e.g., as described above withrespect to FIG. 3). The monitoring can include monitoring the number ofactual I/O requests relative to the specified I/O rate for the virtualdisk instance. In some implementations, the system provides live usagemonitoring. For example, a user can be presented with metrics on actualusage versus capacity for a virtual machine instance or particularvirtual disks.

The system determines that the monitored virtual disk instance usage isless than a threshold for a particular parameter (404). In someimplementations, the threshold for the usage parameter is a particularpercentage (e.g., 80%) of the specified parameter value. For example, anI/O rate performance parameter can have a value of 200 I/O operationsper second for a given virtual disk instance. The monitoring candetermine, over a specified period of time, that the actual usage is 150I/O per second. The system can determine that this monitored usage isless than the threshold amount (e.g., less than 80%).

The system optionally suggests a modified virtual disk instanceparameter (406). A virtual machine disk can have a pricing that is afunction of multiple configuration parameters. When the actual usage fora configuration parameter is less than the threshold value, a differentconfiguration parameter value may yield savings for the user. Forexample, an I/O rate of 160 I/O operations per second may have a lowerpricing than an I/O rate of 200 I/O operations per second. Therefore,the system can suggest to the user that the configuration parameter bemodified based on the monitored usage. In some implementations, thesuggestion includes presenting a corresponding change in pricing for thevirtual disk instance having the new parameter value.

The system receives input selecting the modified virtual disk parameter(408). For example, a user can input a selection in a user interfacepresented by the system. The user selection can include accepting aspecific suggested parameter value or a user selection from two or morepossible parameter values, e.g., using a drop down menu or otherselection mechanism. Alternatively, in some implementations, the userspecifies one or more modified virtual disk parameters. For example, theuser can use a user interface provided by an API that allows the user tochange the configuration of one or more virtual disks. Modifying virtualmachine parameters can include modifying an I/O rate or throughput forone or more virtual disks associated with a particular virtual machine.

The system updates configuration information for the virtual disk (410).Updating the configuration information includes updating the virtualdisk instance to have the specified configuration. Additionally, thephysical resources associated with the virtual disk instance can beadjusted according to the updated configuration. For example, if adifferent performance is specified, the particular physical resourcesrequired to satisfy the performance can change. For example, lowerperformance disks can be allocated to the updated virtual disk instance.In some implementations, the system updates configuration of a virtualmachine instance associated with the updated virtual disk instance.

In some implementations, the monitoring identifies usage exceeding athreshold for a particular parameter. For example, if the actual I/Orate is above the threshold (e.g., above 95% of the specified I/O rate),the system can suggest that the user increase the I/O parameter value inorder to maintain high quality performance of the virtual disk instance.

In some alternative implementations, usage characteristics are used toadjust one or more parameters. For example, usage characteristics can beprovided to a user interacting with a user interface. The user can thenprovide adjustments to one or more parameters. Thus, the user specifiedchanges based on the usage information rather than being provided with asuggestion. In some other implementations, the usage characteristics areprocessed by the system according to specified criteria in order todetermine adjustments to one or more parameters without userinteraction. The system then updates the configuration information basedon the specified changes.

Embodiments of the subject matter and the operations described in thisspecification can be implemented in digital electronic circuitry, or incomputer software, firmware, or hardware, including the structuresdisclosed in this specification and their structural equivalents, or incombinations of one or more of them. Embodiments of the subject matterdescribed in this specification can be implemented as one or morecomputer programs, i.e., one or more modules of computer programinstructions, encoded on computer storage medium for execution by, or tocontrol the operation of, data processing apparatus. Alternatively or inaddition, the program instructions can be encoded on anartificially-generated propagated signal, e.g., a machine-generatedelectrical, optical, or electromagnetic signal, that is generated toencode information for transmission to suitable receiver apparatus forexecution by a data processing apparatus. A computer storage medium canbe, or be included in, a computer-readable storage device, acomputer-readable storage substrate, a random or serial access memoryarray or device, or a combination of one or more of them. Moreover,while a computer storage medium is not a propagated signal, a computerstorage medium can be a source or destination of computer programinstructions encoded in an artificially-generated propagated signal. Thecomputer storage medium can also be, or be included in, one or moreseparate physical components or media (e.g., multiple CDs, disks, orother storage devices).

The operations described in this specification can be implemented asoperations performed by a data processing apparatus on data stored onone or more computer-readable storage devices or received from othersources.

The term “data processing apparatus” encompasses all kinds of apparatus,devices, and machines for processing data, including by way of example aprogrammable processor, a computer, a system on a chip, or multipleones, or combinations, of the foregoing The apparatus can includespecial purpose logic circuitry, e.g., an FPGA (field programmable gatearray) or an ASIC (application-specific integrated circuit). Theapparatus can also include, in addition to hardware, code that createsan execution environment for the computer program in question, e.g.,code that constitutes processor firmware, a protocol stack, a databasemanagement system, an operating system, a cross-platform runtimeenvironment, a virtual machine, or a combination of one or more of them.The apparatus and execution environment can realize various differentcomputing model infrastructures, such as web services, distributedcomputing and grid computing infrastructures.

A computer program (also known as a program, software, softwareapplication, script, or code) can be written in any form of programminglanguage, including compiled or interpreted languages, declarative orprocedural languages, and it can be deployed in any form, including as astand-alone program or as a module, component, subroutine, object, orother unit suitable for use in a computing environment. A computerprogram may, but need not, correspond to a file in a file system. Aprogram can be stored in a portion of a file that holds other programsor data (e.g., one or more scripts stored in a markup languagedocument), in a single file dedicated to the program in question, or inmultiple coordinated files (e.g., files that store one or more modules,sub-programs, or portions of code). A computer program can be deployedto be executed on one computer or on multiple computers that are locatedat one site or distributed across multiple sites and interconnected by acommunication network.

The processes and logic flows described in this specification can beperformed by one or more programmable processors executing one or morecomputer programs to perform actions by operating on input data andgenerating output. The processes and logic flows can also be performedby, and apparatus can also be implemented as, special purpose logiccircuitry, e.g., an FPGA (field programmable gate array) or an ASIC(application-specific integrated circuit).

Processors suitable for the execution of a computer program include, byway of example, both general and special purpose microprocessors, andany one or more processors of any kind of digital computer. Generally, aprocessor will receive instructions and data from a read-only memory ora random access memory or both. The essential elements of a computer area processor for performing actions in accordance with instructions andone or more memory devices for storing instructions and data. Generally,a computer will also include, or be operatively coupled to receive datafrom or transfer data to, or both, one or more mass storage devices forstoring data, e.g., magnetic, magneto-optical disks, or optical disks.However, a computer need not have such devices. Moreover, a computer canbe embedded in another device, e.g., a mobile telephone, a personaldigital assistant (PDA), a mobile audio or video player, a game console,a Global Positioning System (GPS) receiver, or a portable storage device(e.g., a universal serial bus (USB) flash drive), to name just a few.Devices suitable for storing computer program instructions and datainclude all forms of non-volatile memory, media and memory devices,including by way of example semiconductor memory devices, e.g., EPROM,EEPROM, and flash memory devices; magnetic disks, e.g., internal harddisks or removable disks; magneto-optical disks; and CD-ROM and DVD-ROMdisks. The processor and the memory can be supplemented by, orincorporated in, special purpose logic circuitry.

To provide for interaction with a user, embodiments of the subjectmatter described in this specification can be implemented on a computerhaving a display device, e.g., a CRT (cathode ray tube) or LCD (liquidcrystal display) monitor, for displaying information to the user and akeyboard and a pointing device, e.g., a mouse or a trackball, by whichthe user can provide input to the computer. Other kinds of devices canbe used to provide for interaction with a user as well; for example,feedback provided to the user can be any form of sensory feedback, e.g.,visual feedback, auditory feedback, or tactile feedback; and input fromthe user can be received in any form, including acoustic, speech, ortactile input. In addition, a computer can interact with a user bysending documents to and receiving documents from a device that is usedby the user; for example, by sending web pages to a web browser on auser's client device in response to requests received from the webbrowser.

Embodiments of the subject matter described in this specification can beimplemented in a computing system that includes a back-end component,e.g., as a data server, or that includes a middleware component, e.g.,an application server, or that includes a front-end component, e.g., aclient computer having a graphical user interface or a Web browserthrough which a user can interact with an implementation of the subjectmatter described in this specification, or any combination of one ormore such back-end, middleware, or front-end components. The componentsof the system can be interconnected by any form or medium of digitaldata communication, e.g., a communication network. Examples ofcommunication networks include a local area network (“LAN”) and a widearea network (“WAN”), an inter-network (e.g., the Internet), andpeer-to-peer networks (e.g., ad hoc peer-to-peer networks).

The computing system can include clients and servers. A client andserver are generally remote from each other and typically interactthrough a communication network. The relationship of client and serverarises by virtue of computer programs running on the respectivecomputers and having a client-server relationship to each other. In someembodiments, a server transmits data (e.g., an HTML page) to a clientdevice (e.g., for purposes of displaying data to and receiving userinput from a user interacting with the client device). Data generated atthe client device (e.g., a result of the user interaction) can bereceived from the client device at the server.

While this specification contains many specific implementation details,these should not be construed as limitations on the scope of anyinventions or of what may be claimed, but rather as descriptions offeatures specific to particular embodiments of particular inventions.Certain features that are described in this specification in the contextof separate embodiments can also be implemented in combination in asingle embodiment. Conversely, various features that are described inthe context of a single embodiment can also be implemented in multipleembodiments separately or in any suitable subcombination. Moreover,although features may be described above as acting in certaincombinations and even initially claimed as such, one or more featuresfrom a claimed combination can in some cases be excised from thecombination, and the claimed combination may be directed to asubcombination or variation of a subcombination.

Similarly, while operations are depicted in the drawings in a particularorder, this should not be understood as requiring that such operationsbe performed in the particular order shown or in sequential order, orthat all illustrated operations be performed, to achieve desirableresults. In certain circumstances, multitasking and parallel processingmay be advantageous. Moreover, the separation of various systemcomponents in the embodiments described above should not be understoodas requiring such separation in all embodiments, and it should beunderstood that the described program components and systems cangenerally be integrated together in a single software product orpackaged into multiple software products.

Thus, particular embodiments of the subject matter have been described.Other embodiments are within the scope of the following claims. In somecases, the actions recited in the claims can be performed in a differentorder and still achieve desirable results. In addition, the processesdepicted in the accompanying figures do not necessarily require theparticular order shown, or sequential order, to achieve desirableresults. In certain implementations, multitasking and parallelprocessing may be advantageous.

What is claimed is:
 1. A method performed by data processing apparatus,the method comprising: receiving a plurality of user-specified parametervalues for a corresponding plurality of parameters of a request for avirtual disk instance, including parameter values for storage size andinput/output performance for the virtual disk instance; determining oneor more initial physical resources that satisfy the plurality ofreceived user-specified parameter values; allocating the determined oneor more initial physical resources to a virtual disk instance;monitoring usage of a first parameter of the virtual disk instanceincluding computing a monitored usage value for the first parameter, themonitored usage value representing how much of a user-specifiedparameter value for the first parameter was used by the virtual diskinstance; determining that the monitored usage value is less than theuser-specified parameter value of the plurality of user-specifiedparameter values by at least a predetermined amount; in response todetermining that the monitored usage value is less than theuser-specified parameter value of the plurality of user-specifiedparameter values by at least a predetermined amount, modifyinggenerating a modified first parameter value for the first parameterbased on the monitored usage value for the first parameter; generating amodified second parameter value for a second parameter of theuser-specified parameter values; generating a modified plurality ofparameter values from the received parameter values and the modifiedfirst and second parameter values, wherein the modified plurality ofparameter values includes the modified first parameter value as theparameter value for the first parameter and the modified secondparameter value as the parameter value for the second parameter;determining one or more updated physical resources that satisfy themodified plurality of parameter values; and modifying the allocation ofphysical resources to the virtual disk instance at runtime includingallocating the determined one or more updated physical resources to thevirtual disk instance in place of the one or more initial physicalresources.
 2. The method of claim 1, wherein generating a modified firstparameter value for the first parameter based on the monitored usagevalue for the first parameter comprises determining a modified firstparameter value that results in a lower price than a price determinedbased on the user-specified parameter value for the first parameter. 3.The method of claim 1, wherein: receiving a plurality of user-specifiedparameter values comprises receiving the user-specified parameter valuesthrough an interface presented to a user, the interface including fieldsfor specifying discrete values for the user-specified parameter values.4. The method of claim 1, wherein generating a modified first parametervalue based on the monitored usage value comprises: determining amodified parameter value for the first parameter that is between theuser-specified parameter value and the monitored usage value.
 5. Themethod of claim 1, further comprising: adjusting a price associated withthe virtual disk instance based on the modified plurality of parametervalues.
 6. The method of claim 1, wherein the virtual disk instanceappears to a user as a single physical disk having the user-specifiedparameter values for storage size and input/output performance.
 7. Themethod of claim 1, wherein performance of a plurality of physicalresources allocated to the virtual disk instance is smoothed to mimicone or more physical resources.
 8. The method of claim 1, whereinmodifying the allocation of physical resources to the virtual diskinstance at runtime comprises dynamically modifying the allocation ofphysical resources to the virtual disk instance while the virtual diskinstance is in use.
 9. The method of claim 1, further comprising usingthe virtual disk instance to build an instance of a virtual machine. 10.The method of claim 1, wherein receiving a plurality of user-specifiedparameter values includes providing controls for receiving user inputspecifying virtual disk parameter values unconstrained by physicalhardware.
 11. A computer program product, encoded on one or morenon-transitory computer storage media, comprising instructions that whenexecuted by one or more computers cause the one or more computers toperform operations comprising: receiving a plurality of user-specifiedparameter values for a corresponding plurality of parameters of arequest for a virtual disk instance, including parameter values forstorage size and input/output performance for the virtual disk instance;determining one or more initial physical resources that satisfy theplurality of received user-specified parameter values; and allocatingthe determined one or more initial physical resources to a virtual diskinstance; monitoring usage of a first parameter of the virtual diskinstance including computing a monitored usage value for the firstparameter, the monitored usage value representing how much of auser-specified parameter value for the first parameter was used by thevirtual disk instance; determining that the monitored usage value isless than the user-specified parameter value of the plurality ofuser-specified parameter values by at least a predetermined amount; inresponse to determining that the monitored usage value is less than theuser-specified parameter value of the plurality of user-specifiedparameter values by at least a predetermined amount, generating amodified first parameter value for the first parameter based on themonitored usage value for the first parameter; generating a modifiedsecond parameter value for a second parameter of the user-specifiedparameter values; generating a modified plurality of parameter valuesfrom the received parameter values and the modified first and secondparameter values, wherein the modified plurality of parameter valuesincludes the modified first parameter value as the parameter value forthe first parameter and the modified second parameter value as theparameter for the second parameter; determining one or more updatedphysical resources that satisfy the modified plurality of parametervalues; and modifying the allocation of physical resources to thevirtual disk instance at runtime including allocating the determined oneor more updated physical resources to the virtual disk instance in placeof the one or more initial physical resources.
 12. The computer programproduct of claim 11, wherein generating a modified first parameter valuefor the first parameter based on the monitored usage value for the firstparameter comprises determining a modified first parameter value thatresults in a lower price than a price determined based on the userspecified parameter value for the first parameter.
 13. The computerprogram product of claim 11, wherein receiving a plurality ofuser-specified parameter values comprises receiving the user-specifiedparameter values through an interface presented to a user, the interfaceincluding fields for specifying discrete values for the user-specifiedparameter values.
 14. The computer program product of claim 11, whereingenerating a modified first parameter value based on the monitored usagevalue comprises: determining a modified parameter value for the firstparameter that is between the user-specified parameter value and themonitored usage value.
 15. The computer program product of claim 11,wherein the operations further comprise: adjusting a price associatedwith the virtual disk instance based on the modified plurality ofparameter values.
 16. The computer program product of claim 11, whereinthe virtual disk instance appears to a user as a single physical diskhaving the user-specified parameter values for storage size andinput/output performance.
 17. The computer program product of claim 11,wherein performance of a plurality of physical resources allocated tothe virtual disk instance is smoothed to mimic one or more physicalresources.
 18. The computer program product of claim 11, whereinmodifying the allocation of physical resources to the virtual diskinstance at runtime comprises dynamically modifying the allocation ofphysical resources to the virtual disk instance while the virtual diskinstance is in use.
 19. The computer program product of claim 11,wherein the operations further comprise using the virtual disk instanceto build an instance of a virtual machine.
 20. The computer programproduct of claim 11, wherein receiving a plurality of user-specifiedparameter values includes providing controls for receiving user inputspecifying virtual disk parameter values unconstrained by physicalhardware.
 21. A system comprising: one or more computers and one or morestorage devices storing instructions that are operable, when executed bythe one or more computers, to cause the one or more computers to performoperations comprising: receiving a plurality of user-specified parametervalues for a corresponding plurality of parameters of a request for avirtual disk instance, including parameter values for storage size andinput/output performance for the virtual disk instance; determining oneor more initial physical resources that satisfy the plurality ofreceived user-specified parameter values; allocating the determined oneor more initial physical resources to a virtual disk instance;monitoring usage of a first parameter of the virtual disk instanceincluding computing a monitored usage value for the first parameter, themonitored usage value representing how much of a user-specifiedparameter value for the first parameter was used by the virtual diskinstance; determining that the monitored usage value is less than theuser-specified parameter value of the plurality of user-specifiedparameter values by at least a predetermined amount; in response todetermining that the monitored usage value is less than theuser-specified parameter value of the plurality of user-specifiedparameter values by at least a predetermined amount, generating amodified first parameter value for the first parameter based on themonitored usage value for the first parameter; generating a modifiedsecond parameter value for a second parameter of the user-specifiedparameter values; generating a modified plurality of parameter valuesfrom the received parameter values and the modified first and secondparameter values, wherein the modified plurality of parameter valuesincludes the modified first parameter value as the parameter value forthe first parameter and the modified second parameter value as theparameter for the second parameter; determining one or more updatedphysical resources that satisfy the modified plurality of parametervalues; and modifying the allocation of physical resources to thevirtual disk instance at runtime including allocating the determined oneor more updated physical resources to the virtual disk instance in placeof the one or more initial physical resources.
 22. The system of claim21, wherein generating a modified first parameter value for the firstparameter based on the monitored usage value for the first parametercomprises determining a modified first parameter value that results in alower price than a price determined based on the user specifiedparameter value for the first parameter.
 23. The system of claim 21,wherein receiving a plurality of user-specified parameter valuescomprises receiving the user-specified parameter values through aninterface presented to a user, the interface including fields forspecifying discrete values for the user-specified parameter values. 24.The system of claim 21, wherein generating a modified first parametervalue based on the monitored usage value comprises: determining amodified parameter value for the first parameter that is between theuser-specified parameter value and the monitored usage value.
 25. Thesystem of claim 21, wherein the operations further comprise: adjusting aprice associated with the virtual disk instance based on the modifiedplurality of parameter values.
 26. The system of claim 21, wherein thevirtual disk instance appears to a user as a single physical disk havingthe user-specified parameter values for storage size and input/outputperformance.
 27. The system of claim 21, wherein performance of aplurality of physical resources allocated to the virtual disk instanceis smoothed to mimic one or more physical resources.
 28. The system ofclaim 21, wherein modifying the allocation of physical resources to thevirtual disk instance at runtime comprises dynamically modifying theallocation of physical resources to the virtual disk instance while thevirtual disk instance is in use.
 29. The system of claim 21, wherein theoperations further comprise using the virtual disk instance to build aninstance of a virtual machine.
 30. The system of claim 21, whereinreceiving a plurality of user-specified parameter values includesproviding controls for receiving user input specifying virtual diskparameter values unconstrained by physical hardware.
 31. A methodperformed by data processing apparatus, the method comprising:monitoring usage of a virtual disk instance having one or more initialphysical resources allocated according to a plurality of user-specifiedparameter values including values for a storage size and input/outputperformance; computing a monitored usage value for a first parameter ofthe plurality of user-specified parameter values, the monitored usagevalue representing how much of a user-specified parameter value for thefirst parameter was used by the virtual disk instance; determining thatthe monitored usage value is less than user-specified parameter value ofthe plurality of user-specified parameter values by at least apredetermined amount; in response to determining that the monitoredusage value is less than the user-specified parameter value by at leasta predetermined amount, determining a suggested modification value forthe first parameter based on the monitored usage value; providing, to auser, the suggested modification value for the first parameter;receiving user input from the user selecting the suggested modificationvalue for the first parameter; modifying the user-specified parametervalue for the first parameter based on the suggested modification value;replacing the user-specified parameter value of the plurality ofuser-specified parameter values with the suggested modification valueselected by the user; determining one or more updated physical resourcesthat satisfy the suggested modification value; and modifying theallocation of physical resources to the virtual disk instance at runtimeincluding allocating the determined one or more updated physicalresources to the virtual disk instance in place of one or more initialphysical resources allocated to the virtual disk instance.
 32. Themethod of claim 31, wherein determining a suggested modification valuefor the first parameter based on the monitored usage value comprisesdetermining a modified parameter value that results in a reducedallocation of physical resources than the allocation of the initialphysical resources.
 33. A system comprising: one or more computers andone or more storage devices storing instructions that are operable, whenexecuted by the one or more computers, to cause the one or morecomputers to perform operations comprising: monitoring usage of avirtual disk instance having one or more initial physical resourcesallocated according to a plurality of user-specified parameter valuesincluding values for a storage size and input/output performance;computing a monitored usage value for a first parameter of the pluralityof user-specified parameter values, the monitored usage valuerepresenting how much of a user-specified parameter value for the firstparameter was used by the virtual disk instance; determining that themonitored usage value is less than the user-specified parameter value ofthe plurality of user-specified parameter values by at least apredetermined amount; in response to determining that the monitoredusage value is less than the user-specified parameter value by at leasta predetermined amount, determining a suggested modification value forthe first parameter based on the monitored usage value; providing, to auser, the suggested modification value for the first parameter;receiving user input from the user selecting the suggested modificationvalue for the first parameter; modifying the user-specified parametervalue for the first parameter based on the suggested modification value;replacing the user-specified parameter value of the plurality ofuser-specified parameter values with the suggested modification valueselected by the user; determining one or more updated physical resourcesthat satisfy the suggested modification value; and modifying theallocation of physical resources to the virtual disk instance at runtimeincluding allocating the determined one or more updated physicalresources to the virtual disk instance in place of one or more initialphysical resources allocated to the virtual disk instance.
 34. Thesystem of claim 33, wherein determining a suggested modification valuefor the first parameter based on the monitored usage value comprisesdetermining a modified parameter value that results in a reducedallocation of physical resources than the allocation of the initialphysical resources.
 35. A computer program product, encoded on one ormore non-transitory computer storage media, comprising instructions thatwhen executed by one or more computers cause the one or more computersto perform operations comprising: monitoring usage of a virtual diskinstance having one or more initial physical resources allocatedaccording to a plurality of user-specified parameter values includingvalues for a storage size and input/output performance; computing amonitored usage value for a first parameter of the plurality ofuser-specified parameter values, the monitored usage value representinghow much of a user-specified parameter value for the first parameter wasused by the virtual disk instance; determining that the monitored usagevalue is less than the user-specified parameter value of the pluralityof user-specified parameter values by at least a predetermined amount;in response to determining that the monitored usage value is less thanthe user-specified parameter value by at least a predetermined amount,determining a suggested modification value for the first parameter basedon the monitored usage value; providing, to a user, the suggestedmodification value for the first parameter; receiving user input fromthe user selecting the suggested modification value for the firstparameter; modifying the user-specified parameter value for the firstparameter based on the suggested modification value; replacing theuser-specified parameter value of the plurality of user-specifiedparameter values with the suggested modification value selected by theuser; determining one or more updated physical resources that satisfythe suggested modification value; and modifying the allocation ofphysical resources to the virtual disk instance at runtime includingallocating the determined one or more updated physical resources to thevirtual disk instance in place of one or more initial physical resourcesallocated to the virtual disk instance.
 36. The computer program productof claim 35, wherein determining a suggested modification value for thefirst parameter based on the monitored usage value comprises determininga modified parameter value that results in a reduced allocation ofphysical resources than the allocation of the initial physicalresources.